﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gerencial_Fisio_Nutry.Tela
{
    public partial class ProcuraPessoa : Form
    {
        public ProcuraPessoa(bool isCliente)//false para revendedor
        {
            InitializeComponent(); carregar(isCliente);
        }
        public ProcuraPessoa()//false para revendedor
        {
            InitializeComponent(); carregar();
        }
        public void carregar()
        {
            dgVPessoas.DataSource = new Banco.MetodoBanco().conjuntoDePessoas();


            dgVPessoas.Columns[0].HeaderText = "Codigo";
            dgVPessoas.Columns[1].HeaderText = "Nome";
            dgVPessoas.Columns[2].HeaderText = "Pessoa";
            dgVPessoas.Columns[0].Width = 80;
            dgVPessoas.Columns[1].Width = 230;
            dgVPessoas.Columns[2].Width = 223;
        }
        public void carregar(bool isCliente)
        {
            dgVPessoas.DataSource = new Banco.MetodoBanco().conjuntoDePessoas(isCliente);


            dgVPessoas.Columns[0].HeaderText = "Codigo";
            dgVPessoas.Columns[1].HeaderText = "Nome";
            dgVPessoas.Columns[2].HeaderText = "Pessoa";
            dgVPessoas.Columns[0].Width = 80;
            dgVPessoas.Columns[1].Width = 230;
            dgVPessoas.Columns[2].Width = 223;
        }
        public int cod_pessoa;

        private void dgVPessoas_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Logica.Pessoa pessoa = new Banco.MetodoBanco().carregarPessoaByCodigo
                    (int.Parse(dgVPessoas.Rows[e.RowIndex].Cells[0].Value.ToString()));
                carregaTela(pessoa);
            }
            catch
            {


            }
        }
        public Logica.Pessoa pessoa;
        public void carregaTela(Logica.Pessoa pessoa)
        {
            try
            {
                gCliente.Enabled = false;
                tbCodigoPessoa.Text = pessoa.cod_pessoa.ToString("00000");
                tbNome.Text = pessoa.nome;
                tbEndereco.Text = pessoa.endereço;
                tbNumero.Text = pessoa.numero;
                tbTelefone.Text = pessoa.telefone;
                tbDataCadastro.Text = pessoa.dataCadastro.ToShortDateString();
                tbCidade.Text = pessoa.cidade;
                tbEstado.Text = pessoa.UF;
                tbCpf.Text = pessoa.cpf;
                tbRg.Text = pessoa.rg;
                tbEmail.Text = pessoa.email;
                tbUrl.Text = pessoa.url;
                cod_pessoa = pessoa.cod_pessoa;
                cbCliente.Checked = new Banco.MetodoBanco().isCliente(pessoa.cod_pessoa);
                cbRevendedor.Checked = new Banco.MetodoBanco().isRevendedor(pessoa.cod_pessoa);
                this.pessoa = pessoa;
                this.pessoa.isRevendedor = cbRevendedor.Checked;
                this.pessoa.isCliente = cbCliente.Checked;
            }
            catch {
                cod_pessoa = 0;

            }
        }

        #region validadores
        public bool temPessoa(string nome)
        {
          return  new Banco.MetodoBanco().temPessoaByName(nome, tbCpf.Text);
           
        }
        public bool cpfValido(string cpf)
        {
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string tempCpf;            string digito;
            int soma = 0;            int resto;
            cpf = cpf.Trim();            cpf = cpf.Replace(".", "").Replace("-", "");
            if (cpf.Length != 11)                return false;
            tempCpf = cpf.Substring(0, 9);
            for (int i = 0; i < 9; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
            resto = soma % 11;
            if (resto < 2)                resto = 0;
            else                resto = 11 - resto;
            digito = resto.ToString();
            tempCpf = tempCpf + digito;
            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
            resto = soma % 11;
            if (resto < 2)                resto = 0;
            else                resto = 11 - resto;
            digito = digito + resto.ToString();
            return cpf.EndsWith(digito);
        }
        public bool nascimentoValido(string nascimento)
        {
            DateTime resultado = DateTime.MinValue;
            if (DateTime.TryParse(nascimento.Trim(), out resultado)) 
                return true;
            else                return false;
        }
        public bool comissaovalida(string comissao)
        {
            try
            {
                double d = double.Parse(comissao);
                if (d > 0 && d < 100)
                    return true;
                else return false;
            }
            catch { return false; }
           
        }
        public bool cadastroCorreto()
        {
            if(gCliente.Enabled)
                if (temPessoa( tbNome.Text) || tbEndereco.Text.Length ==0 || tbTelefone.Text.Length< 8
                //|| tbCidade.Text.Length < 1 || tbEstado.Text.Length !=2 || !cpfValido( tbCpf.Text)
                //|| tbRg.Text.Length < 6 
                || (!cbCliente.Checked && !cbRevendedor.Checked) 
                //|| tbCEP.Text.Length<8 
                ||( cbRevendedor.Checked &&   !comissaovalida(tbDescontoReven.Text)) )
                    return false;
            
            return true;
        }
        #endregion
        private void button1_Click(object sender, EventArgs e)
        {
            if (!gCliente.Enabled)
            {
                this.Close(); return;
            }
            if (cadastroCorreto() )
            {
             cod_pessoa =   new Banco.MetodoBanco().cadastraPessoa
                    (tbNome.Text, tbEndereco.Text, tbNumero.Text, tbCidade.Text
                    , tbEstado.Text, tbCEP.Text, tbNascimento.Text, tbTelefone.Text, tbEmail.Text, tbCpf.Text
                    , tbRg.Text, tbUrl.Text, cbRevendedor.Checked, double.Parse("0"+tbDescontoReven.Text.Replace('.', ',')));
             this.pessoa = new Banco.MetodoBanco().carregarPessoaByCodigo(cod_pessoa);
                this.Close();
            }
            else
                MessageBox.Show("Complete o Cadastro para Prosseguir");
        }

        private void bBack_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            //Modelagem para ALTERAR CLIENTES
        }

        private void cbRevendedor_CheckedChanged(object sender, EventArgs e)
        {
            if (cbRevendedor.Checked)
            {
                tbDescontoReven.Visible = true;
                label6.Visible = true;
                label7.Visible = true;
            }
            else
            {
                tbDescontoReven.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }


        }

        public void limparCampos()
        {
            cbRevendedor.Checked = false;
            cbCliente.Checked = true;
            tbCodigoPessoa.Enabled = false;
            tbCodigoPessoa.Text = "Aguardando Cadastro";
            tbNome.Text = "";
            tbEndereco. Text = "";
            tbNumero.Text = "";
            tbTelefone.Text = "";
            tbDataCadastro.Text = DateTime.Now.ToShortDateString();
            tbDataCadastro.Enabled = false;
            tbNascimento.Text = "";
            tbCidade.Text = "";
            tbEstado.Text = "";
            tbRg.Text = "";
            tbCpf.Text = ""; tbEmail.Text = ""; tbUrl   .Text = "";
            tbDescontoReven.Text = "0";

        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            gCliente.Enabled = true;
            limparCampos();
        }
    }
}
